package com.lanca.controller;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HystrixDemoController {

    private static final Logger log = LoggerFactory.getLogger(HystrixDemoController.class);

    /**
     * fallbackMethod/defaultFallback 同时存在时，自定义的优先级高一些
     *
     * @param id id
     * @return String
     */
    @GetMapping("/demo")
    @HystrixCommand(fallbackMethod = "demoFallBack", defaultFallback = "defaultFallback")
    public String demo(Integer id) {
        String result = "input id = " + id;
        if (id <= 0) {
            throw new RuntimeException("无效id");
        }
        return result;
    }


    /**
     * 默认 要求 返回值 为String 不能有具体的参数，可以处理批量
     *
     * @return String
     */
    public String defaultFallback() {
        return "HYSTRIX服务正常，默认的熔断处理反应，全局的熔断批量处理 ";
    }


    /**
     * ziding自定义，具体到某个方法
     *
     * @param id id
     * @return string
     */
    public String demoFallBack(Integer id) {
        return "HYSTRIX服务正常，自定义熔断处理方式，具体到方法的处理，接收参数 id= " + id;
    }
}
